package br.urca.controller;

import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;

import javax.imageio.ImageIO;
import javax.inject.Inject;
import javax.servlet.ServletContext;

import org.apache.commons.io.IOUtils;

import com.google.common.io.Files;

import br.com.caelum.vraptor.Controller;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.controller.IndexController;
import br.com.caelum.vraptor.observer.upload.UploadedFile;
import br.com.caelum.vraptor.validator.Validator;
import br.urca.interceptor.InterceptResource;
import br.urca.session.UsuarioLogado;
import br.urca.validator.PerfilValidator;

@Controller
@InterceptResource
public class PerfilController {
	
	private Result result;
	private ServletContext context;
	private UsuarioLogado mUsuarioLogado;
	private Validator validator;

	@Deprecated public PerfilController() { }
	
	@Path("/perfil")
	public void index() {
		
	}

	@Inject
	public PerfilController(Result result, ServletContext context,
			UsuarioLogado mUsuarioLogado, Validator validator) {
		super();
		this.result = result;
		this.context = context;
		this.mUsuarioLogado = mUsuarioLogado;
		this.validator = validator;
	}
	
	public void atualizaFoto(UploadedFile foto) {
		
		PerfilValidator.validate(foto, validator);
		
		if (foto != null) {
			try (InputStream input = foto.getFile()) {
				
				String path = context.getInitParameter("pathFotos");
				File fotoSalva = new File(path, mUsuarioLogado.getAluno()
						.getMatricula().concat(".jpg"));
				Files.write(IOUtils.toByteArray(input), fotoSalva);
				
				BufferedImage imagem = null;
				try {
					imagem = ImageIO.read(fotoSalva);
				} catch (IOException e) {
					e.printStackTrace();
				}
				int new_w = 140, new_h = 140;
				BufferedImage new_img = new BufferedImage(new_w, new_h,
						BufferedImage.TYPE_INT_RGB);
				Graphics2D g = new_img.createGraphics();
	
				g.drawImage(imagem, 0, 0, new_w, new_h, null);
				ImageIO.write(new_img, "JPG", new File(path, mUsuarioLogado.getAluno()
						.getMatricula().concat(".jpg")));
				
				result.include("mensagem", "Foto atualizada com suceso!")
						.redirectTo(IndexController.class).index();
			} catch (IOException e) {
				result.include(
						"mensagem",
						"Problema ao tentar enviar imagem! Tente novamente mais tarde. "
								+ e.getMessage()).redirectTo(this).index();
			}
		} else {
			result.include("mensagem", "Você não selecionou o arquivo!")
					.redirectTo(this).index();
		}
	}
	
}
